package hehe.aop.base;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 事件类
 *<B>说明：</B>
 *<pre>
 * 　略
 *</pre>
 *<B>示例：</B>
 *<pre>
 *  略
 *</pre>
 *<B>日志：</B>
 *<pre>
 *  略
 *</pre>
 *<B>注意事项：</B>
 *<pre>
 *  略
 *</pre>
 */
public class Event
{
    /**
     * 事件的行为列表
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    protected List<Class<? extends Behavior>> behaviors = new ArrayList<>();

    /**
     *　绑定事件与行为
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     * @param behavior 行为class
     */
    public void addBehavior(Class<? extends Behavior> behavior)
    {
        this.behaviors.add(behavior);
    }

    /**
     *　绑定事件与行为
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     * @param behaviors 行为class
     */
    public void addBehavior(Class<? extends Behavior>[] behaviors)
    {
        for (Class<? extends Behavior> behavior:behaviors) {
            this.behaviors.add(behavior);
        }
    }

    /**
     * 判断判断指定事件否有行为
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    public boolean hasBehavior()
    {
        if (this.behaviors.size() > 0) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 获取通事件行为列表
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    public List<Class<? extends Behavior>> getEventBehavior()
    {
        return this.behaviors;
    }

    /**
     * 触发事件
     *<B>说明：</B>
     *<pre>
     * 略
     *</pre>
     */
    public void trigger(Object target,Map<String,Object> attrs)
    {
        Behavior beh;
        for (Class<? extends Behavior> behavior:this.behaviors) {
            try {
                beh = behavior.newInstance();
                beh.invoke(target);
            } catch (Exception ex) {
                //
            }
        }
    }
}
